#ifndef JUEGOCLIENTIMP_H_
#define JUEGOCLIENTIMP_H_

#include "Juego.h"
#include "Cliente.h"
#include "mutex.h"
#include "ObservableGtk.h"
#include "Mapa.h"
#include <string>
using namespace std;

class Cliente;
class JuegoClientImp : public Juego, public ObservableGtk
{
private:
	Cliente* cliente;
	string estado;
	red::hilos::thread::Mutex control_Mutex;
	//red::hilos::thread::Mutex turno_Mutex;
public:
	
	JuegoClientImp(unsigned int cantidadDeJugadores, Mapa* mapa, Cliente* cliente);
	
	void tirarDados(Jugador* jugador, unsigned int cantidadDeDados);
	
	void colocarEjercitos(Jugador *jugador, Territorio *territorio, unsigned int cantidadDeEjercitos);
	
	void realizarAtaque(Ataque* ataque);
	
	void moverEjercitos(Jugador* jugador, Territorio* origen, Territorio* destino, unsigned int cantidadDeEjercitos);
	
	void pasar(Jugador* jugador);
	
	void abandonar(Jugador* jugador);
	
	Cliente* getCliente();
	
	void setEstado(string estadoJuego);
	
	string getEstado();
	
	bool isEnEstadoDePreparacion();
	bool isEstadoDeRefuerzoYReubicacion();
	bool isEnEstadoDeAtaque();
	bool isEnEstadoDeFortificacionDeUnidades();
	bool isEnEstadoDePartidaFinalizada();
	bool isEnEstadoDeEsperaDeJugadores();
		
	virtual void setTurno(string colorJugador);
	
	virtual ~JuegoClientImp();
};

#endif /*JUEGOCLIENTIMP_H_*/
